import router from "@/router";
import store from "@/store";
import {
  $get,
  $post
} from "../api/http";
import cookies from 'vue-cookies';


const TokenKey = "Token";
const UserInfoKey = "User-Info";
const usage = {
  // 刷新页面缓存数据赋值vuex
  cacheAssignmentVuex() {
    if (cookies.get(TokenKey)) {
      store.commit("setToken", cookies.get(TokenKey));
    }
    if (cookies.get(UserInfoKey)) {
      store.commit(
        "setUserInfo",
        cookies.get(UserInfoKey)
      );
    }
  },
  time() {
    // 当前时间
    return new Date().getTime(); // 1603009495724,精确到毫秒
  },
  // 获取token
  getToken() {
    return store.state.token;
  },

  // 初始接口获取
  initData(){
  },

  // 排序方法
  sortArrayByKey(array, key) {  
    // 使用sort方法，并传入一个比较函数  
    array.sort(function(a, b) {  
      // 如果key存在于两个对象中，则比较它们的值  
      // 注意：这里假设key对应的值都是可以进行比较的（如数字、字符串等）  
      if (a.hasOwnProperty(key) && b.hasOwnProperty(key)) {  
        // 使用b[key] - a[key]来实现降序排序  
        // 如果需要升序排序，则使用a[key] - b[key]  
        return b[key] - a[key];  
      }
    });  
    return array;  
  }, 


  // 储存token
  setToken(token) {
    cookies.set(TokenKey, token, '12h');
    store.commit("setToken", token);
  },

  // 删除token
  removeToken() {
    cookies.remove(TokenKey);
    store.commit("removeToken");
  },

  // 获取用户信息
  getUserInfo() {
    return store.state.userInfo;
  },

  // 设置用户信息
  setUserInfo(userInfo) {
    cookies.set(UserInfoKey, JSON.stringify(userInfo),'24h');
    store.commit("setUserInfo", userInfo);
  },

  // 删除用户信息
  removeUserInfo() {
    cookies.remove(UserInfoKey);
    store.commit("removeUserInfo");
  },

  // 获取某个缓存
  getCache(name) {
    if (cookies.get(name)) {
      return cookies.get(name);
    }
    return "";
  },

  // 设置某个缓存
  setCache(name, data) {
    cookies.set(name, JSON.stringify(data),'24h');
  },

  // 删除某个缓存
  removeCache(name) {
    cookies.remove(name);
  },

  // 用户密码验证
  checkPassword(str, text) {
    // 1.密码必须由字母、数字、特殊符号组成，区分大小写
    // 2.特殊符号包含（. _ ~ ! @ # $ ^ & *）
    // 3.密码长度为8-20位
    // ^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[._~!@#$^&*])[A-Za-z0-9._~!@#$^&*]{8,20}$
    /* eslint-disable */
    const passwordReg = /^.*(?=.*[\@#\!*$!])(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/;
    const noSpace = /^\S*$/;
    if (!noSpace.test(str)) {
      return text + "密码不能包含空格";
    }
    if (str.length > 20 || str.length < 8) {
      return text + "密码长度必须为8-20位";
    }
    if (!passwordReg.test(str)) {
      return text + "密码!@#*$，小写字母，大写字母，数字，均必须有至少一个！";
    }
    return false;
  },
  // 手机号验证
  checkCellPhone(str, text) {
    const cellPhone = /^1\d{10}$/;
    const noSpace = /^\S*$/;
    if (!noSpace.test(str)) {
      return `${text || ""}手机号不能包含空格`;
    } else if (!cellPhone.test(str)) {
      return `${text || ""}手机号格式错误`;
    } else {
      return false;
    }
  },
  // 退出登录方法
  logOut() {
    if (cookies.get(TokenKey)) {
      $post("/cta/auth/logout", {})
        .then(() => {
          usage.removeToken();
          usage.removeUserInfo();
          router.push({
            name: "loginView"
          });
        })
        .catch(() => {
          usage.removeToken();
          usage.removeUserInfo();
          router.push({
            name: "loginView"
          });
        });
    } else {
      usage.removeToken();
      usage.removeUserInfo();
      router.push({
        name: "loginView"
      });
    }
  },
  // 获取时间
  timeNow() {
    let hours;
    let minutes;
    let seconds;
    const vWeek = [
      "星期天",
      "星期一",
      "星期二",
      "星期三",
      "星期四",
      "星期五",
      "星期六",
    ];
    const date = new Date();
    const year = date.getFullYear();
    const month = date.getMonth() + 1;
    const day = date.getDate();
    hours = date.getHours();
    hours = hours > 9 ? hours : `0${hours}`;
    minutes = date.getMinutes();
    minutes = minutes > 9 ? minutes : `0${minutes}`;
    seconds = date.getSeconds();
    seconds = seconds > 9 ? seconds : `0${seconds}`;
    const vWeekS = date.getDay();
    const time = `${year}-${month}-${day} ${vWeek[vWeekS]} ${hours}:${minutes}:${seconds}\t`;
    return time;
  }
};
export default usage;